#include<iostream>
#include<pthread.h>
#include<unistd.h>
#include<string>
#include<cstring>
#include<ctime>

using namespace std;


//启动函数
void* thread_run(void*args)
{
    while(true)
    {
        cout<<"线程运行中..."<<endl;
        sleep(1);
    }

    pthread_exit((void*)10);
}


 int main()
{
    cout<<"I am the main stream"<<endl;
    //线程ID
    pthread_t pth;
    //创建线程
    pthread_create(&pth,nullptr,thread_run,nullptr);
    //线程分离
    pthread_detach(pth);
    sleep(1);
    //线程等待
    int n=pthread_join(pth,nullptr);
    if(n!=0)
    {
        cerr<<"errno: "<<strerror(n)<<endl;
    }
    
    cout<<"主线程退出..."<<endl;
    return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////



// //启动函数
// //需要返回值和参数都是void*
// void* thread_run(void*args)
// {
//     sleep(2);
//     //自己终止自己
//     pthread_cancel(pthread_self());

//     while(true)
//     {
//         cout<<"线程运行中..."<<endl;
//         sleep(1);
//     }

//     pthread_exit((void*)10);
// }


//  int main()
// {
//     cout<<"I am the main stream"<<endl;
//     //线程ID
//     pthread_t pth;
//     //创建线程
//     pthread_create(&pth,nullptr,thread_run,nullptr);

//     while(true)
//     {   
//         sleep(1);
//         printf("主线程运行中...\n");
//     }
    
//     return 0;
// }


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////


// class ThreadData
// {
// public:
//     ThreadData(const string&name,const int id,const time_t createTime)
//     :_name(name)
//     ,_id(id)
//     ,_createTime(createTime)
//     {}

//     ~ThreadData()
//     {}

// public:
//     string _name;
//     int _id;
//     time_t _createTime;
// };

// //启动函数
// //需要返回值和参数都是void*
// void* thread_run(void*args)
// {
//     ThreadData *td=static_cast<ThreadData*>(args);
//     for(int i=0;i<1;i++)
//     {
//         cout<<"new thread's name: "<<td->_name<<"; id: "<<td->_id<<"; create time: "<<td->_createTime<<endl;
//         sleep(1);
//     }

//     delete td;
    
//     // return (void*)10;
//     pthread_exit((void*)10);
// }


// int main()
// {
//     cout<<"I am the main stream"<<endl;
//     pthread_t pth[NUM];

//     for(int i=0;i<NUM;i++)
//     {
//         char tname[64];
//         snprintf(tname,sizeof(tname),"pthread[%d]",i+1);
//         ThreadData*td=new ThreadData(tname,i+1,time(nullptr));

//         pthread_create(pth+i,nullptr,thread_run,td);
//     }

//     //接收返回的信息
//     void*ret=nullptr;
//     //线程等待
//     for(int i=0;i<NUM;i++)
//     {
//         pthread_join(pth[i],&ret);
//         cout<<"获取的退出信息:"<<(int_fast64_t)ret<<endl;
//     }

//     cout<<"多线程运行完毕"<<endl;
    
    


//     return 0;
// }